import os
import shutil

def sync_all(src_root, dst_root):
    """
    同步整个目录下的文件和子目录
    :param src_root: 源目录 (如 \\192.168.1.12\出厂测试 )
    :param dst_root: 目标目录 (如 E:\出厂测试 )
    """
    if not os.path.exists(dst_root):
        os.makedirs(dst_root)

    for root, dirs, files in os.walk(src_root):
        # 计算相对路径，保持目录结构
        rel_path = os.path.relpath(root, src_root)
        dst_dir = os.path.join(dst_root, rel_path)
        if not os.path.exists(dst_dir):
            os.makedirs(dst_dir)

        for f in files:
            src_file = os.path.join(root, f)
            dst_file = os.path.join(dst_dir, f)

            # 判断是否需要复制
            if not os.path.exists(dst_file) or \
               os.path.getsize(src_file) != os.path.getsize(dst_file) or \
               os.path.getmtime(src_file) > os.path.getmtime(dst_file):
                shutil.copy2(src_file, dst_file)
                print(f"Copied: {src_file} -> {dst_file}")


# 示例使用
src = r"\\192.168.1.12\出厂测试"
dst = r"E:\出厂测试"
sync_all(src, dst)
